Repo auto make wiki page - ☆Wiki Sandbox - НТЦ 'Комплексные Системы'

D8-FileClient

Сервис, предназначенный для импорта данных из файлов различного формата в систему Дельта.

Поддерживается обработка текстовых файлов, бинарных файлов, в том числе формата csv, xml, xlsx.

Сервис позволяет принимать файлы из файловой системы, FTP-каталога и, для некоторых форматов, из web-сайтов.

Аргументы командной строки

  • -s (или -service, -r, -regserver)
    Регистрация службы.
  • -u (или -unregserver)
    Отмена регистрации.
  • -run
    Запуск в режиме обычного приложения.
  • -nopbrvalidation
    Отключает валидацию очередности и времени принимаемых ПБР.
  • -logsql
    Включает логирование SQL-запросов.
  • -debuginfo
    Добовляет отладачную информацию в лог.

Файлы конфигурации

  • d8_fileclient.xml
    Основной конфигурационный файл.
  • d8_fileclient.commonrdutxt.xml
    Конфигурация парсинга макетов для типа шаблона CommonRduTxt. Содержит регулярные выражения и другие настройки, необходимые для парсинга макетов.
  • d8_fileclient.commontxt.xml
    Конфигурация парсинга макетов для шаблона CommonTxt на основе регулярных выражений.

Формат d8_fileclient.xml

<configuration
  debugInfo="true/false, default: false" 
  logSql="true/false, default: false" 
  noPbrValidation="true/false, default: false" 
  >
  <instances>
    <instance
      name="text" 
      clientllConstr="text" 
      clientllAuthConstr="text" 
      paramDbConstr="text" 
      archiveDbConstr="text" 
      commandDbConstr="text" 
      archiveDbConstr2="text" 
      commandDbConstr2="text" 
      >
      <vectorCatalog
        d8Id="vectorCatalog_paramId" 
        entry="vectorCatalog_entryName" />
      <folders>
        <folder
          name="text" 
          type="MailFolder/FileFolder/FtpFolder/ModesSql, default: FileFolder" 
          createdOnly="true/false, default: false, OBSOLETE" 
          fileActions="GetExisting/GetNew/GetChanged/GetAll Copy/Move/DeleteSrcOnSuccess/DeleteSrcOnError/DeleteSrc/DeleteDstOnSuccess/DeleteDstOnError/DeleteDst, no default" 
          sourcePath="text" 
          scanSubdir="true/false, default: false" 
          targetPath="text" 
          backupPath="text" 
          stateFolder="text" 
          filter="text, default: *.*" 
          minFileCreateAge="int_seconds / timespan, default: 0 - not used" 
          maxFileCreateAge="int_seconds / timespan, default: 0 - not used" 
          minFileModifAge="int_seconds / timespan, default: 0 - not used" 
          maxFileModifAge="int_seconds / timespan, default: 0 - not used" 
          pathPattern="regular_expression, default: not used" 
          updateRate="int_seconds / timespan, default: 5" 
          rescanRate="int_seconds / timespan, default: 0 - not used" 
          timeout="int_seconds / timespan, default: 10" 
          abandonTimeout="int_seconds / timespan / -1 (infinite), default: 00:30:00" 
          vectorCatalogEntry="vectorCatalog_entryName" 
          >
          <timezone
            bias="int_minutes" 
            daylightSaving="true/false" 
            timezoneString="timezoneId" 
            daylightGap="true/false" />
          <referenceTimezone
            bias="int_minutes" 
            daylightSaving="true/false" 
            timezoneString="timezoneId"    />
          <netuse
            remoteName="share_path" 
            localName="network_drive_name" 
            user="user" 
            password="password" />
          <ftpServer
            address="host_or_ip[:port]" 
            user="user" 
            password="password" 
            passive="true/false, default: false" 
            ssl="true/false, default: false" />
          <preprocessing
            type="Execute/Xslt/Sql, default: Execute" 
            constr="connsection_string" 
            resultPath="path" 
            successCode="int_rescode" >
            text
          </preprocessing>
          <processing>
            <template
              name="text" 
              type="text, processingTemplateType" 
              subtype="text" 
              logOnly="true/false, default: false" 
              ppbrOnly="true/false, default: false" 
              storage="Default/NoStorage/Dataserver/Archive/RdgOnly/Rdg" 
              pbrIsolationLevel="Unspecified/Chaos/ReadUncommitted/ReadCommitted/RepeatableRead/Serializable/Snapshot, default: Unspecified" 
              reasonFormat="string, default: '{service}: {pbr}'" 
              timeshift="timeSpan, default: 00:00:00" 
              timeround="timeSpan, default: 00:00:00" 
              defaultTimestamp="Empty/Current/File, default: File" 
              allowMissingItems="true/false, default: false" 
              >
              <timezone
                bias="int_minutes" 
                daylightSaving="true/false" 
                daylightGap="true/false" 
                timezoneString="TZ_spec" />
              <referenceTimezone
                bias="int_minutes" 
                daylightSaving="true/false" 
                timezoneString="TZ_spec" />
              <items>
                <item
                  srcId="text" 
                  d8Id="int, default: -1" 
                  d8Type="Analog/Discrete/Vector/Record, default: Analog" 
                  d8MetaType="metaTypeShortName, default: null" 
                  gtp="int, default: 0" 
                  includeSum="true/false" 
                  addToD8Id="int, default: 0" 
                  coefK="double, default: 1.0" />
                <item />
                ...
              </items>
            </template>
            <template />
            ...
          </processing>
          <postprocessing type="Execute/Xslt/Sql, default: Execute">text</postprocessing>
        </folder>
        <folder />
        ...
      </folders>
    </instance>
    <instance />
    ...
  </instances>
</configuration>

Тэг configuration

  • debugInfo
    То же, что и ключ -debuginfo.
  • logSql
    То же, что и ключ -logsql.
  • noPbrValidation
    То же, что и ключ -nopbrvalidation.

Тэг instance

Описывает одно подключение к подсистеме Дельта.

  • name
    Логическое имя инстанса, участвует только в логах.
  • clientllConstr
    Cтрока подключения к CS-DataServer.
  • clientllAuthConstr
    Cтрока подключения к БД, используемая для win-авторизации в CS-DataServer. Если она не указана, то используется встроенная авторизация.
  • paramDbConstr
    Cтрока подключения к БД НСИ. Она же при необходимости используется как строка подключения к БД метатипов.
     
  • archiveDbConstr
    Cтрока подключения к архивной БД системы Дельта.
  • commandDbConstr
    Cтрока подключения к БД команд системы Дельта.
  • archiveDbConstr2
    Cтрока подключения к резервной архивной БД системы Дельта.
  • commandDbConstr2
    Cтрока подключения к резервной БД команд системы Дельта.

Если указан атрибут archiveDbConstr и не указан commandDbConstr (или наоборот), то считается, что эти атрибуты имеют одинаковые значения.
Если clientllConstr указан то D8-FileClient будет подключаться к CS-DataServer (даже если это подключение никак не будет использовано).

Тэг folder

Описывает папку (на диске, в сети), которая служит источником данных.

  • name
    Логическое имя folder-а, участвует только в логах.
  • sourcePath
    Путь папки-источника.
  • type
    Тип папки-источника. Возможные типы папки-источника:
     
    • MailFolder
      Считается, что папка с путем sourcePath - это папка, в которую складывает подпапки с письмами служба D8 MailClient.
      В этом случае D8-FileClient будет искать подпапки в sourcePath, файлы непосредственно в sourcePath игнорируются.
       
    • FileFolder
      Источник данных - это файлы, которые находятся непосредственно в папке sourcePath (вложенные папки не обрабатываются).
       
    • ModesSql
      Источник данных - это БД Modes-Terminal, а sourcePath - это строка подключения этой БД.
  • scanSubdir
    Если true, то нужно сканировать вложенные папки.
  • createdOnly (устаревший)
    Если false, то обрабатываются все файлы в папке. Иначе обрабатываются файлы, которые появляются в папке-источнике. Атрибут оставлен для совместимости, использовать fileActions.
  • fileActions
    Комбинация флагов (через пробел), которая задает то, какие файлы нужно принимать в обработку и какие действия с ними нужно совершать.

    Возможные флаги:

    • GetExisting - обрабатывать файлы, существующие в папке-источнике на момент запуска службы.
    • GetNew - обрабатывать файлы, которые появляются в папке-источнике.
    • GetChanged - обрабатывать изменившиеся файлы в папке-источнике (признак изменения - это изменение времени модификации файла).
    • GetAll - обрабатывать все файлы в папке-источнике.
    • Copy - файл будет скопирован из папки-источника в папку-получатель и после это прочитан и обработан уже из папки-получателя.
    • Move - файл будет перемещен из папки-источника в папку-получатель и после это прочитан и обработан уже из папки-получателя.
    • DeleteSrcOnSuccess - файл в папке-источнике будет удален после обработки, если обработка завершилась без ошибок.
    • DeleteSrcOnError - файл в папке-источнике будет удален после обработки, если обработка завершилась ошибкой.
    • DeleteSrc - файл в папке-источнике будет удален ДО обработки в любом случае.
    • DeleteDstOnSuccess - файл в папке-получателе будет удален после обработки, если обработка завершилась без ошибок.
    • DeleteDstOnError - файл в папке-получателе будет удален после обработки, если обработка завершилась ошибкой.
    • DeleteDst - файл в папке-получателе будет удален после обработки в любом случае.
       
      Если не указано ни флага Copy, ни флага Move, то будет обработан исходный файл в папке-источнике.
  • targetPath
    Путь папки-получателя. Сюда служба копирует обработанные файлы. Если не указан, то обработанные файлы никуда не копируются.
  • filter
    Фильтр для поиска файлов в папке-источнике в досовском формате. Например, *.xml или pbr?.*. По умолчанию: *.*
  • maxFileCreateAge
    Максимальное время от создания файла. Если атрибут задан (и не равен нулю), то для каждого файла будет проверяться между разница между текущим временем и временем создания файла. Если эта разница больше, чем maxFileCreateAge, то файл игнорируется. Ранее атрибут назывался minFileAgeCreated.
  • minFileCreateAge
    Минимальное время от создания файла. Если атрибут задан (и не равен нулю), то для каждого файла будет проверяться между разница между текущим временем и временем создания файла. Если эта разница меньше, чем minFileCreateAge, то файл игнорируется.
  • maxFileModifAge
    Максимальное время от изменения файла. Если атрибут задан (и не равен нулю), то для каждого файла будет проверяться между разница между текущим временем и временем модификации файла. Если эта разница больше, чем maxFileModifAge, то файл игнорируется.
  • minFileModifAge
    Минимальное время от изменения файла. Если атрибут задан (и не равен нулю), то для каждого файла будет проверяться между разница между текущим временем и временем модификации файла. Если эта разница меньше, чем minFileModifAge, то файл игнорируется.
     
  • pathPattern
    Регулярное выражения, используемое в качестве дополнительного фильтра файлов. Регулярное выражение используется после фильтра filter и накладывается на полный путь каждого файла.
    Выражение однострочное и нечувствительное к регистру.
     
  • backupPath
    Путь папки, в которую будут копироваться резервные копии файлов или папок перед их обработкой. По умолчанию не задан и резервные копии не создаются.
    Возможные ошибки при создании резервных копий не считаются критическими и не прерываются процесс обработки файлов.
     
  • stateFolder
    Путь папки, в которую будут сохраняться файлы состояния обработки. Если не указано, то не используется.
  • updateRate
    Периодичность (в секундах) проверки папки на наличие новых файлов или подпапок, в секундах.
  • rescanRate
    Периодичность (в секундах) перечитывания каталога папки-источника.
  • timeout
    Таймаут операций с файлами и папками, в секундах. Например, если в течении таймаута не удается получить доступ к файлу, то в лог пишется ошибка.
  • abandonTimeout
    Время, в течении которого служба будет повторять попытки обработать файл.
  • vectorCatalogEntry
    Название записи в файловом архиве системы Дельта.
Тэг folder может содержать:
  • preprocessing, processing, postprocessing
  • preprocessing, processing
  • processing
  • processing, postprocessing
  • preprocessing
  • или вообще ничего

Тэг folder.netuse

Элемент netuse позволяет настроить подключение сетевого ресурса перед обработкой папок. Его атрибуты:

  • remoteName
    Имя сетевого ресурса на удаленной машине.
  • localName
    Имя сетевого ресурса для локальной машины (буква диска). Не обязательно.
  • user
    Пользователь (желательно с указанием домена).
  • password
    Пароль пользователя.

Пример:

    <netuse remoteName="\\10.0.0.112\ras" user="10.0.0.112\delta8" password="delta222" />

Тэг folder.ftpServer

Элемент ftpServer позволяет задать настройки подключения к FTP-серверу (для типа папки-источника FtpFolder). Его атрибуты:

  • address
    Адрес (хост или IP) и порт (опционально) FTP-сервера.
  • user
    Пользователь.
  • password
    Пароль пользователя.
  • passive
    Использовать или нет пассивный режим обмена.
  • ssl
    Использовать или нет SSL-шифрование.

Тэг instance.vectorCatalog

Элемент vectorCatalog если указан, то позволяет включить в обработке для типа FileFolder проверку наличия записи в архиве системы Дельта.

  • d8Id
    Номер параметра системы Дельта, который представляет каталог файлового архива.
  • entry
    Название записи в фаловом архиве системы Дельта. Это название может содержать те же токены, что и команды предобработки.
    На уровне тэга folder этот атрибут можно переопределить атрибутом folder.vectorCatalogEntry.

Если instance.vectorCatalog указан, то при получении нового файла и перед началом обработки, будет выполнен поиск записи в архиве подсистемы Дельта с меткой времени, такой же как время изменения полученного файла и названием таким же, как указано в entryName. Если запись есть, то обработка не выполняется (файл игнорируется).

Тэги preprocessing и postprocessing

Тэги preprocessing и postprocessing описывают предварительную и пост- обработку принимаемых файлов. С их помощью можно выполнить скрипт, запустить bat-файл и т.д.

  • type
    Тип обработки.
     
    • Execute
      Выполнение командной строки. Сама командная строка указывается в тексте тэга preprocessing (или postprocessing).
       
    • Sql
      Выполнение SQL-запроса. Если указан constr, то запрос выполняется на источнике, со сторокой подключения constr, иначе - на архивной БД. В последнем случае для работы необходимо указать строку соединеия в instance.archiveDbConstr. Текст запроса указывается в тексте тэга preprocessing (или postprocessing).
       
    • Xslt
      Выполнение XSL-преобразования. Путь до файла преобразования .xsl указывается в constr. Результат преобразования сохраняется в памяти и дополнительно, если указан resultPath, записывается в файл. Макет типа Xml использует результат предобработки, сохраненный в памяти.
       
  • constr
    Строка соединения для обработки типа Sql или путь к файлу с описанием преобразования для обработки типа Xslt.
  • resultPath
    Путь к файлу, в который будут записаны результаты выполнения предобработки (для обработки Sql и Xslt). В случае с Sql поля в файле разделяются табуляцией.
  • successCode
    Код, который должны возвращать все команды обработки (для случая Execute). Если возвращаемй код отличается, то обработка завершается с ошибкой.

Текст командной строки пред-/постобработки text, строка соединения constr и путь resultPath могут содержать токены, заменяемые на параметры обрабатываемого файла:

  • #targetpath
    Полный путь обрабатываемого файла (включая имя).
    Если указан атрибут folder.targetPath (т.е. путь папки-получателя), то #targetpath - это путь обрабатываемого файла, который уже скопирован из папки-источника в папку-получатель. Если же folder.targetPath не указан, то #targetpath - это исходный путь обрабатываемого файла (т.е. в папке-источнике).
  • #targetname
    Это имя обрабатываемого файла (без пути). Если folder.targetPath указан, то #targetname - это имя которое файлу назначила служба при его копировании в папку-источник. Если не указан, то #targetname - это исходное имя файла.
  • #targetfolder
    Путь обрабатываемого файла без имени файла c завершающим слэшем в конце.
  • #targetnoextname
    Имя обрабатываемого файла без расширения и точки.
  • #targetext
    Расширение обрабатываемого файла (без точки).
  • #targetrelfolder
    Относительный путь к папке обрабатываемого файла без слэша в начале и со слэшем в конце пути.
  • #originalpath
  • #originalname
  • #originalfolder
  • #originalnoextname
  • #originalext
  • #originalrelfolder
    Аналогично токенам выше, но для исходного имени или пути обрабатываемого файла.
  • #caption
    Заголовок файла.
    Если folder.type равен MailFolder, то #caption - это тема письма.
  • #timestamp
    Для случая FileFolder - это метка модификации файла.
    Для случая MailFolder - это время отправки e-mail, c которым обрабатываемый файл был принят службой D8 MailClient.
     
    Например, нужно каждый принимаемый файл копировать в папку C:\newfolder, тогда можно написать:
      <preprocessing><![CDATA[cmd /C copy "#targetpath" "C:\newfolder\#originalname"]]></preprocessing>  

    Таким образом можно дублировать обработку одного и того же файла разными folder-ами или организовывать цепочки обработки.
     
    Если надо каждый раз после успешного приема очередного файла нужно запускать VBS-скрипт, то можно написать
      <postprocessing><![CDATA[cscript myscript.vbs "#timestamp" "#targetpath"]]></postprocessing>  

Тэг processing

Тэг processing описывает основную обработку принимаемых файлов и состоит из описания набора шаблонов (тэг template). У каждого шаблона есть тип и, опционально, подтип. Название типа шаблона определяется в коде службы атрибутом TemplateData. Названия подтипов каждого шаблона определяются конфигурационным файлом для соответствующего шаблона.
Атрибуты тэга template:

  • name
    Логическое имя template-а, участвует только в логах.
  • type
    Тип шаблона.
    Если принимаемый файл не подходит под шаблон указанного типа, то он игнорируется.
  • subtype
    Подтип шаблона.
    Если принимаемый файл не подходит под шаблон указанного типа и подтипа, то он игнорируется. Если subtype не указан, то принимаются файлы, подходящий под шаблон любого подтипа.
  • logOnly (для макетов ДГ)
    Если true, то принимать в режиме LOG_ONLY (т.е. записывать ПБР во временные таблицы).
  • ppbrOnly (для макетов ДГ)
    Если true, то принимать только ПБР-0, остальные ПБР игнорировать.
  • storage
    Тип хранения данных. Имеет смысл не для всех шаблонов.
     
    Для шаблонов ПБР можно указать:
    • Rdg - стандартное сохранение в архив подсистемы Дельта и таблицы RDG*;
    • Archive - запись только в архив;
    • RdgOnly - запись только в таблицы RDG*.
       
      Для шаблонов CommonTxt можно указать:
    • Dataserver - писать только в текущие данные подсистемы Дельта,
    • Archive - писать только в архив подсистемы Дельта,
    • Archive,Dataserver - писать и в текущие данные, и в архив.
  • pbrIsolationLevel
    Уровень изоляции транзакции, создаваемой для внесения изменений в БД ПБР. Возможные значения:
    • Unspecified - по умолчанию
    • Chaos
    • ReadUncommitted
    • ReadCommitted
    • RepeatableRead
    • Serializable
    • Snapshot
  • reasonFormat
    Формат вывода поля RDGEvents.REASON. Может содержать слудующие токены подстановки:
    • {service} - отображаемое имя службы (D8-FileClient)
    • {folder} - атрибут folder.name
    • {template} - атрибут template.name
    • {pbr} - информация о ПБР (зависит от типа шаблона)
  • timeshift
    Дополнительный сдвиг меток времени (добавляется к меткам).
  • timeround
    Величина по которой будут округлены метки времени данных.
  • defaultTimestamp
    Определяет значение меток времени, если они не указаны в макете данных.
    Возможны значения:
    • Empty - пустое значение (DateTime.MinValue)
    • Current - текущее время
    • File - время модификации файла макета или время получения макета
  • allowMissingItems
    Определяет, допустим ли прием макетов, содержащих не все элементы, указанные в конфигурации.

Тэг timezone

Тэг timezone описывает часовой пояс меток времени данных в принимаемых макетах.

При сохранении значений в систему Дельта метки времени значения макета будут переведены из часового пояса timezone в UTC.
Для многих макетов timezone фиксирован и его можно (или нужно) не указывать.

timezone.bias - это сдвиг времени в минутах от Гринвича. Для московского времени это -180 (до 2011 года). Начиная с 2011 года timezone для московского часового пояса:

  <timezone bias="-240" daylightSaving="false" daylightGap="?" />  

Если timezone.daylightSaving равен true, то считается, что в макете используется переход на летнее время.

Вместо timezone.bias и timezone.daylightSaving можно указать timezone.timezoneString (строковый идентификатор часового пояса).

Атрибут timezone.daylightGap используется только для макетов ДГ. Если он true, то считается что в сутки перехода на летнее/зимнее время в макете добавляется/убирается один час местного времени.

Тэг referenceTimezone

Тэг referenceTimezone используется в качестве вспомогательного часового пояса.

Для макетов ПБР - это московский часовой пояс. Используется для определения номера ПБР, актуальности ПБР, времени активации ПБР и пр.

Тэг item

Тэг item описывает набор данных в макете.

  • srcId
    Идентификатор набора данных в исходном файле.
  • gtp
    Для макетов ДГ - идентификатор ГТП в таблице RDGGTPs.
  • d8Id
    Идентификатор параметра системы Дельта. Если равен 0, то данные для этого item не сохраняются в системе Дельта.
  • d8Type
    Тип параметра Дельта.
    • Analog - аналоговый (по умолчанию)
    • Discrete - дискретный
    • Vector - векторный
    • Record - табличный
       
  • d8MetaType
    Краткое имя мета-типа параметра. Может использоваться для параметров типа Vector или Record для спецификации набора полей внутри структуры, представляющей одно значение для параметра.
    Для получения информации о мета-типе используется мета-ДБ со строкой подключения paramDbConstr.
  • addToD8Id
    Идентификатор параметра системы Дельта, к которому нужно прибавить данные этого item. Точнее, данные будут прибавлены к данным item-а, у которого атрибут d8Id равен атрибуту addToD8Id этого item-а.
  • coefK
    Коэффициент, на который надо умножить данные этого item-а. Если не указан, то умножения не будет.
  • includeSum
    Для макетов ПБР - равен true, если в макете в наборе данных, описываемым этим item-ом присутствует сумма всех значений.

Алгоритм обработки папок

Обработка папок типа FileFolder

Алгоритм обработки folder для случая FileFolder:

  • Периодически проверяется наличие новых файлов. Если createdOnly равен true, то новыми файлами считаются, те, которые появились в папке-источнике со времени предыдущей проверки. Если createdOnly равен false, то новыми файлами считаются все файлы в папке-источнике.
    Для случая createdOnly вновь появившиеся файлы обрабатываются так:
     
    • новый файл замечается;
       
    • далее отслеживается момент, когда время модификации файла перестает увеличиваться и этот файл можно открыть на чтение (т.е. файл полностью записан в папку-источник и закрыт);
       
    • если доступ к файлу не появляется в течении 30 мин, то он игнорируется.
  • В любом случае на новые файлы накладывается фильтр (folder.filter).
  • Далее, если не createdOnly и папка-получатель указана, то новый файл копируется в папку-получатель (с новым именем) и удаляется из папки-источника.
  • Затем, если указан preprocessing, то он выполняется. Если при этои происходит ошибка, то на этом обработка заканчивается.
  • Дальше выполняется основная обработка (если она определена в конфиге):
     
    • Служба пытается определить формат макета файла. Поиск выполняется среди всех типов шаблонов, описанных тэгами template.
       
    • Если файл не подпадает ни под один формат, то обработка заканчивается.
       
    • Если подходящий макет найден (тип макета определен), то проверяется поддип макета (сравнивается с template.subtype). Если поддип не соответствует тому, что написано в template, то обработка заканчивается. Если template.subtype вообще не указан в конфиге, то проверка на поддтип не выполняется.
       
    • Далее, когда понятен тип и подтип макета, которому соответствует файл, производится парсинг файла и формируются наборы значений для каждого элемента данных (для каждого тэга item).
       
    • Полученные наборы суммируются (при наличии атрибутов item.addToD8Id) и множатся на коэффициент item.coefK (при наличии таких атрибутов).
       
    • Метки времени данных переводятся в UTC с помощью тэга timezone или кода обработки соответствующего макета.
       
    • Для макетов ДГ производится проверка корректности времени (если не указан флажок -nopbrvalidation).
       
    • Затем полученные данные сохраняются с использованием атрибута template.storage или кода обработки соответствующего макета.
  • Если основная обработка завершается без ошибок, то выполняется пост-обработка (если она определена тэгом postprocessing).

Обработка папок типа MailFolder

Обработка аналогична случаю FileFolder, со следующими отличиями.

  • Атрибут createdOnly всегда должен быть false.
  • Производится не поиск новых файлов, а новых подпапок в папке-источнике.
  • В папку-получатель (если она определена) копируются не отдельные файлы, а новая подпапка целиком (с переименованием).
  • Вся обработка (preprocessing, processing, postprocessing) выполняется для каждого файла в обрабатываемой подпапке за исключением:
     
    • message.xml
    • body_original.txt
  • Момент, когда у службы гарантировано должен быть доступ ко всем файлам подпапки определяется как момент, когда появляется доступ к файлу message.xml (файл с описанием e-mail).
  • Такие мета-данные каждого файла из обрабатываемой подпапки как метка времени и тема читаются из message.xml.
  • Если message.xml прочитать не удается, то соответствующая подпапка пропускается.

Макеты

Список поддерживаемых макетов:

  • D8DS
    Файлы данных в формате D8DS.
  • CommonTxt
    Макеты на основе регулярных выражений. Описываются в файле d8_fileclient.commontxt.xml.
  • Xml
    Данные в формате XML.
    В обработке используется принятый XML-файл или результат предобработки типа Xslt (при её наличии).
    В принятых XML-данных для каждого элемента item будет выполнен XPath-запрос, указанный в item.srcId. Каждый XML-элемент в полученной выборке считается записью для параметра Дельта, а атрибуты этого элемента считаются полями этой записи.
    Для сопоставления атрибутов XML-элемента с полями записи параметра используется описание мета-типа, указанное в item.d8MetaType. Имя атрибута XML-элемента принимается за имя свойства мета-типа параметра Дельта. Пустые значения пропускаются.
     
  • Binary
    Бинарные файлы. Для каждого параметра указывается смещение в файле и тип данных.
     
  • OM650
    Экспортный файл АСУТП OM650.
  • ProsoftDataImpXml
    Файлы, создаваемые утилитой DataImpEx от Прософт.
  • Zip
    Произвольные файлы, сохраняемые в файловый архив подсистемы Дельта.
  • OscilNeva
    Файлы осциллограмм РАС Нева. Макет унаследован от макета Zip.
  • OscilAura
    Файлы осциллограмм системы Аура. Макет унаследован от макета Zip.
  • CommonRduTxt
    Текстовые макеты ПБР на основе регулярных выражений. Описываются в файле d8_fileclient.commonrdutxt.xml.
  • XlsCells
    Файлы Excel с привязкой параметров подсистемы Дельта к ячейкам на страницах документа.
  • IgresXls
    XLS-макет ПБР, некогда используемый на Ириклинской ГРЭС.
  • ModesSql
    Макеты ПБР, принимаемые из БД MSSQL системы Modes-Terminal.
  • ModesSqlCommands
    Диспетчерские команды, принимаемые из БД MSSQL системы Modes-Terminal.
  • ChrduTxt
    Текстовый макет ПБР, некогда используемый Челябинским РДУ.
     
  • ShgresTxt
    Текстовый макет ПБР, некогда используемый на Шатурской ГРЭС.
  • MosrduTxt
    Текстовый макет ПБР, некогда используемый на Московским РДУ.
  • TubrCsv
    Текстовый макет ПБР, используемый в системах ТУБР Гекон, ТУБР Гепард и Modes Center.

Примеры

Примеры исходных файлов данных в формате различных макетов и примеры настройки службы для работы с такими входными данными размещены здесь:

История версий

  • 1.7.21.0400
    • Служба переведена на стандарт PrimitiveService.
  • 1.6.20.0426
    • Исправлена ошибка, из-за которой некорректно обрабатывалась ситуация с несуществующим или поврежденным файлом .pbrdump.
  • 1.6.19.0925
    • Добавлена поддержка импорта XML-данных с помощью шаблона типа Xml и предварительная обработка типа Xslt (XSL-преобразование).
  • 1.5.19.0418
    • Добавлена возможность проверки кода возврата после выполнения команды постобработки (предобработки).
       
  • 1.5.18.1030
    • Атрибут minFileAgeCreated переименован в maxFileCreateAge (старое название оставлено для совместимости).
    • Добавлены настройки <folder.maxFileCreateAge>, minFileCreateAge, maxFileModifAge, minFileModifAge.
    • В обработке команд ModesSql добавлена обработка команды P,3 (игнорируется).
  • 1.5.18.0813
    • Улучшена обработка ошибок для ModesSql для случая отсутствия данных в исходной БД.
       
  • 1.5.18.0601
    • Исправлена ошибка, из-за которой при поиски записи в VectorCatalog могло произойти исключение (NullReferenceException).
       
  • 1.5.18.0529
    • Исправлена ошибка, из-за которой настройки minFileAgeCreated и pathPattern нельзя было использовать совместно.
       
  • 1.5.18.0524
    • Для атрибута minFileAgeCreated теперь можно использовать формат задания в виде TimeSpan (напр. "365.0:0:0").
    • Обработка атрибута minFileAgeCreated добавлена для папок типа FtpFolder и AuraRasWeb.
       
  • 1.5.18.0320
    • Для папок типа FtpFolder добавлена возможность сканирования вложенных папок и добавлена поддержка фильтров на имена файлов (атрибут <folder>.filter).
       
  • 1.5.18.131
    • Добавлено сопоставление команд Modes-Terminal в команды РДГ для ДК "Максимум генерации" и "Минимум генерации".
       
  • 1.5.18.0123
    • Пути targetPath, backupPath, stateFolder теперь по умолчанию разрешаются относительно папки службы.
    • Файлы состояния обработки фаловых папок теперь ограничиваются в размере на 2 Мб.
       
  • 1.5.17.1120
    • Теперь для макетов ModesSql настройка <folder>.Timeout записывается в таймаут выполнения таймаута команд в исходной БД.
       
  • 1.5.17.1023
    • Испрвлена обработка флагов DeleteOnXxx для папки типа MailFolder.
    • Добавлена функция создания резервных копий файлов и папок перед их обработкой (настройка backupPath).
       
  • 1.5.17.0830
    • Теперь при парсинге строки значения служба поддерживает формат вида "<value>`S=<state>", что позволяет описывать значения, снабженные признаком статуса.
    • Для макетов CommonTxt добавлена возможность использования регулярных выражений для поиска и замены текста в исходных данных.
       
  • 1.5.17.0622
    • Исправлена ошибка, из-за которой переподключение к датасерверу выполнялось с большой задержкой.
       
  • 1.5.17.0621
    • Добавлен тип макета Binary для импорта данных из бинарного файла по указанному смещению и типу данных.
  • 1.5.17.0526
    • Теперь предобработка Sql позволяет выполнить запрос на любом SQL-источнике. А результат выполнения теперь можно записать в текстовый файл.
       
  • 1.5.17.0331
    • Добавлена поддержка импорта диспетчерских команд из БД Modes-Terminal (шпблон ModesSqlCommands).
  • 1.4.17.0210
    • Добавлена поддержка макета XlsCells.
  • 1.4.17.0130
    • Опорный часовой пояс по умолчанию (настройка templateReferenceTimezone) изменен на "D8 Russia (UTC+03:00)".
    • Для макетов TubrCsv добавлен парсинг имени файла и поддержка макетов, содержащих данные за полные сутки, а не только начиная с первого часа действия ПБР.
  • 1.4.16.0413
    • Добавлена поддержка макета для файлов в формате D8DS.
  • 1.4.16.0411
    • Добавлнеа обработка null-значениий в таблице RDGTriggers.
  • 1.4.16.0329
    • Изменения в API.
  • 1.4.16.0205
    • Теперь если соединения с датасервером нет, а оно необходимо, то файлы не обрабатываются.
  • 1.4.15.1216
    • Исправлена ошибка обработки множественных нахождений регулярного выражения в CommonTxt.
    • Добавлена возможность переименования целыми строками и указания переименования по умолчанию в CommonTxt.
    • Теперь в ClientllConstr можно указывать атрибуты win-авторизации, а атрибут ClientllAuthConstr можно не использовать.
    • Инициализация подключения к датасерверу теперь выполняется с повторами в случае исключений.
  • 1.4.15.1214
    • Исправлена ошибка, из-за которой служба замечала изменение файла в FTP-каталоге только в первый раз.
    • Удалены неиспользуемые фрагменты логики обработки кэша файловых каталогов.
  • 1.4.15.1202
    • Улучшено логирование обработки файлов для случаев, когда обработка не включает основную часть.
  • 1.4.15.1125
    • Добавлена установка свойства AppDescr для соединения с датасервером.
  • 1.4.15.1123
    • Теперь при обработке CommonTxt можно указывать группу регвыражения "timebase" для задания базы, относительно которой задаются метки времени в данных.
    • При обработке макетов CommonTxt теперь можно принимать несколько значений в одной записи. Для этого вместо srcId нужно указать порядковый номер нахождения группы "value" подгруппы "record" от нуля в виде srcId="#0".
    • Исправлена ошибка в обработке флага fileASctions DeleteSrc, приводившая к неудалению исходного файла.
  • 1.4.15.1109
    • Улучшено логирование предварительной обработки (таймаут для Execute).
  • 1.4.15.1021
    • Добавлен тип предварительной и пост-обработки Sql.
    • В наборе команд FileActions. Добавлены флаги DeleteSrcXxx, флаги DeleteXxx переименованы в DeleteDstXxx.
  • 1.4.15.1013
    • Добавлен тип папки-источника FtpFolder (директория на FTP-серерве) и элемент для указания настроек связи с FTP-сервером <folder>.<ftpServer>.
  • 1.3.15.0917
    • Теперь макеты Zip и его дочерние макеты можно использовать без VectorCatalog.
      В этом случае в указанный в тэге item параметр сохраняется векторное значение, которое формируется как zip-архив указанных в srcId файлов.
  • 1.3.15.0910
    • Улучшено логирование ошибок работы с VectorCatalog.
  • 1.3.15.0908
    • Добавлен макет OscilAura. Наследован от макета Zip, отличается только возможностью определения заголовка файла по его пути.
  • 1.3.15.0903
    • Добавлена возможность указывать флаги Delete, DeleteOnSuccess, DeleteOnError для папок типа MailFolder.
    • Добавлена настройка template.allowMissingItems.
    • Исправлена ошибка в обработке макетов ProsoftDataImpXml (в некоторых случаях была попытка обработать путь папки, вместо пути файла)
  • 1.3.15.0901
    • Исправлена ошибка в парсинге группы "value" регулярных выражения для макетов CommonTxt.
    • Добавлена сортировка записей параметра по времени для CommonTxt.
  • 1.3.15.0827
    • Элемент vectorCatalog перенесен с уровня folder на уровень instance.
    • Добавлен тип папки AuraRasWeb.
  • 1.3.15.0826
    • Добавлена поддержка макета ProsoftDataImpXml - XML-файл обмена данными от Прософт.
  • 1.3.15.0805
    • Исправлена ошибка обработки файлов для случая fileActions="GetAll".
  • 1.3.15.0803
    • Исправлена ошибка, которая приводила к удалению из очереди обработки файлы, на которые временно нет доступа.
  • 1.3.15.0729
    • Теперь атрибуты folder.timeout, folder.rescanRate и folder.updateRate можно указывать либо в секундах, либо в формате TimeSpan.
    • Улучшен механизм остановки службы и отмены обработки.
  • 1.3.15.0728
    • Теперь каждый инстанс обрабатывается в своем потоке.
    • Каталог файлового архива подсистемы Дельта теперь перечитывается раз в час.
  • 1.3.15.0727
    • Добавлены настройки folder.pathPattern и folder.rescanRate.
    • Добавлен шаблон обработки OscilNeva. То же, что и Zip, но при парсинге выполняется попытка определить заголовок записи (название осциллограммы) из содержимого файла типа .os?? (файл осциллограммы РАС Нева).
  • 1.3.15.0723
    • Добавлены токены для подстановок в командах предобработки.
    • Добавлена бработка переменных окружениях в командах предобработки.
    • Добавлена возможность проверки наличия файлов (для FileFolder) в архиве системы Дельта.
    • Добавлен шаблон обработки Zip для упаковки набора файлов и записи в архив системы Дельта.
  • 1.2.15.0716
    • Исправлена проблема совместимости с предыдущими версиями, которая проявлялась если в конфигурационном файле не указана настройка fileActions.
  • 1.2.15.0710
    • Добавлена настройка <template>.defaultTimestamp. Варианты значения: File, Current, Empty.
    • Для шаблона CommonTxt добавлена возможность указывать в регулярном выражении группы timestamp, state, xstate.
    • Для шаблона CommonTxt добавлена возможность указывать набор замен текста для каждой группы регулярного выражения (тэг <substitutions>).
    • Теперь в конфигурации шаблона можно к типу шаблона через обратный слэш добавить подтип шаблона. Это ограничит перебор возможных подтипов до единственного варианта.
  • 1.2.15.0708
    • Исправлена ошибка в обработке значения <timezone>.timezoneString.
    • Для шаблона CommonTxt добавлена возможность указывать миллисекунды, не указывать метку времени (в этом случае используется текущее время), указывать метку времени частично (можно указать дату и не указать время; указать дату и часы, но не указать минуты и секунды и т.д.).
    • Добавлена поддержка векторных значений.
    • Для шаблона CommonTxt можно указывать несколько групп "?<value>". Это будет соответствовать структуре типа object[] для векторного параметра.
    • Для шаблона CommonTxt теперь можно внутри группы "?<value>" в регулярном выражении указать формат данных.
      Формат записи: ?<value[:[formatString][?dataType]]>
      Например: ?<value:dMMM HH:mm?System.DateTime>
  • 1.2.15.0707
    • Добавлена поддержка изменившегося формата БД Modes-T (таблицы PlanVersions и PlanValues).
  • 1.2.15.0623
    • Добавлена возможность подключения сетевого ресура.
  • 1.2.15.0618
    • Служба переведена на .NET4.
    • Теперь пишет лог в отдельный evt-файл.
    • Служба переведена на d8_client3, COM API больше не используется.
    • Добавлен атрибут "timezoneString" для тэгов <timezone> и <referenceTimezone>, который теперь можно использовать вместо комбинации атрибутов "bias" и "daylightSaving". Теперь используется класс TimeConverter.
  • 1.1.15.0403
    • Исправлена ошибка, вызванная избыточной валидацией <folder>.fileActions.
  • 1.1.14.1209
    • Добавлена настройка <template>.timeshift. Если указана, то это значение будет добавлено к меткам времени данных.
    • Добавлена настройка <template>.timeround. Если указана, то метки времени будут округлены до ближайшего времени кратного timeround.
  • 1.1.14.1208
    • Добавлен тип макета OM650 - экспортные файлы АСУТП OM650.
    • Вместо настройки <folder>.createOnly добавлена настройка <folder>.fileActions. Старая настройка оставлена для совместимости.
    • Добавлена настройка <item>.d8Type.
  • 1.0.14.1028
    • Теперь если при парсинге макета ПБР оказывается, что дата ПБР некорректна (не совпадает с началом суток), то в лог выводится предупреждение, а макет игнорируется.
  • 1.0.14.0214
    • Исправлена ошибка с дублированием инкремента триггеров в таблице RDGTriggers.
  • 1.0.13.1216
    • В макет TubrCsv добавлена поддержка еще одного формата даты/времени и анализ имени файла макета для определения того, что макет представляет собой ППБР.
  • 1.0.12.1227
    • Исправлена ошибка, приводившая к многократному принятию ПБР из Modes Terminal в случае, когда в конфигурации указано несколько вариантов настройки шаблона.
  • 1.0.12.0924
    • Улучшена обработка шаблона ChrduTxt. Теперь строки после первой пустой строки игнорируются. Было необходимо для обработки сигнатуры антивируса.
  • 1.0.12.0921
    • Добавлен атрибут <template>.reasonFormat - форматирование для значения, записываемого в поле REASON таблицы RDGEvents.
  • 1.0.12.0919
    • Исправлена ошибка парсинга файла pbrdump с отсутствующими датами ПБР/ППБР.
  • 1.0.12.0808
    • Исправления в логировании.
  • 1.0.12.806
    • Добавлен атрибут <template>.pbrTransIsolation и вывод уровня изоляции транзакции в лог (если logSql="true"). По умолчанию принимает значение Unspecified. Возможные значения - System.Data.IsolationLevel.
  • 1.0.12.0803
    • Два запроса модификации значений в таблице RDGTriggers объединены в один, чтобы избежать вероятность маскирования исключения OleDb из первого запроса.
  • 1.0.12.0620
    • Теперь при выборке макетов из БД Modes Terminal за одну итерацию выбираются макеты ППБР, а за следующую итерацию макеты ПБР. Если установлен флаг -runOnce, макеты выбираюся все за одну итерацию (как раньше, и ППБР, и ПБР).
    • При обработке макетов ПБР Modes Terminal в лог выводится id исходного макета.
    • При выборке макетов из БД Modes Terminal даты (столбец day) проверяются на наличие ненулевого времени. Сделано для фильтрации записей с датой в местном (московском) времени.
  • 1.0.12.0601
    • Теперь если не выставлен флаг debugInfo, то выборка ПБР из БД Modes Terminal огранчивается не только датами последних полученных ПБР и РДГ, но и текущим врменем. Сделано для того, чтобы на кластерах при переключении узлов не выбирались лишние записи и для возможности пропустить ПБР в случае многократной ошибки парсинга.
  • 1.0.12.0531
    • Добавлено сообщение в лог в случае, когда для параметра не обнаружено значений в ПБР в БД Modes Terminal.
  • 1.0.12.0529
    • Добавлена поддержка макетов Modes Terminal с пропусками значений.
  • 1.0.12.0524
    • Подробное логирование ошибок подключения к БД Modes Terminal.
    • При ошибке парсинга макета из Modes Terminal обработка прерывается, на следующем цикле обработка начинается с этого же макета.
  • 1.0.12.0521
    • В запросе выборки значений ПБР из БД Modes Terminal устранена возможность получения дублирующихся записей.
  • 1.0.12.0515
    • В макете CommonTxt добавлен автовыбор SQL-провайдера для OLEDB-подключения к архивной БД.
  • 1.0.12.0413
    • Исправлена ошибка выборки планов БР из БД Modes Terminal.
  • 1.0.12.0410
    • Добавлена поддержка типа обработки папок ModesSql - база данных Modes Terminal. Для этого случая (<folder>.type="ModesSql"), <folder>.sourcePath - это строка соединения к БД Modes Terminal.
    • Теперь элементы <timezone> и <referenceTimezone> можно указывать не только на уровне <template>, но и на уровне <folder>. Значения по умолчанию <timezone> и <referenceTimezone> больше не поддерживаются.
    • Добавлен тип шаблона ModesSql.
       
  • 1.0.11.1025
    • Исправлена ошибка в обработке макета MosrduTxt (он же ShgresTxt), приводившая к неправильному вычислению времени начала действия ПБР.
  • 1.0.11.1020
    • Исправлена ошибка в обработке макета TubrCsv, приводившая к неправильному вычислению времени начала действия ПБР.
  • 1.0.11.0914
    • Добавлен тэг <template>.<referenceTimezone>. Используется в качестве вспомогательного часового пояса. Для макетов ПБР - это московский часовой пояс. Используется для определения номера ПБР, актуальности ПБР, времени активации ПБР и пр.
  • 1.0.11.0913
    • Актуальность макета ПБР теперь проверяется, используя часовой пояс, указанный в <template>.<timezone>. Раньше использовался фиксированный часовой пояс GMT+3/daylightsaving.
    • В макете TubrCsv теперь также используется часовой пояс из <template>.<timezone>.
    • Часовой пояс по умолчанию для макетов ПБР НЕ ИЗМЕНЕН и по-прежнему остается таким:
      <timezone bias="-180" daylightSaving="true" daylightGap="true" />
    • Для CommonRduTxt добавлен атрибут <template>.skip.
  • 1.0.11.0909
    • Добавлен флаг Default для атрибута <template>.storage;
    • В конфигурацию добавлен макет 30308.
  • 1.0.11.0712
    • Добавлено сообщении о модификации архива при приеме ПБР.
    • Добавлено гарантированное освобождение ресурсов SQL-транзакции при приеме ПБР.
  • 1.0.11.0707
    • Теперь файлы с ПБР перед множественной обработкой сортируются не только по дате модификации, но и по имени (во ыторую очередь).
  • 1.0.11.0629
    • В коде сохранения ПБР в базы данных исключена возможность одновременного создания двух подключений к одной и той же БД и одного и того же пользователя.
    • Теперь при повторной регистрации в лог не выводится сообщение о том, что источник событий уже существует.
  • 1.0.11.0602
    • Добавлен атрибут <folder>.updateRate - периодичность проверки папок.
  • 1.0.11.0601
    • Добавлена сортировка файлов и папок перед обработкой. Для MailFolder, папки сортируются по имени. Для FileFolder, файлы сортируются по времени последнего изменения.
    • Добавлены атрибуты <configuration>.debugInfo, <configuration>.noPbrValidation, <configuration>.logSql.
    • Добавлен ключ командной строки -debuginfo.
    • Добавлена возможность использования нескольких конфигураций для одного и того же типа макета.
    • Теперь с флагом createdOnly="true" обрабатываются не только вновь появившиеся файлы, но и измененные и пересозданные файлы.
    • Добавлен атрибут <template>.name.
  • 1.0.11.0420
    • Теперь к сообщению "Файл не был обработан, т.к. его формат не распознан или не включен в конфигурацию" добавляются все исключения, которые выбросили каждый из классов обработки макетов.
  • 1.0.11.0419
    • Изменено регулярное выражение для темы писем с ПБР в шаблоне ChrduTxt.
  • 1.0.11.0202
    • Добавлены атрибуты archiveDbConstr2 и commandDbConstr2.
  • 1.0.11.0114
    • Исправлена ошибка обработки часового пояса значения "Начало выполнения" в БД РДГ (поля D1, T1 и S1 в таблице RDGEvents).
    • Теперь timezone влияет на повидение IgresXls.
  • 1.0.11.0112
    • Теперь папки с письмами (для MailFolder) пропускаются, если в них нет message.xml (или он не доступен). Раньше попытка обработки повторялась на следующей итерации.
  • 1.0.10.1125
    • Макет ShgresTxt переименован в MosrduTxt (старое название также работает).
  • 1.0.10.1103
    • Добавлена настройка coefK - коэффициент, на который будут помножены значения макетов ПБР.
    • Добавлена поддержка макетов ПДГ и ППБР для ShgresTxt.
  • 1.0.10.1102
    • Добавлен макет ShgresTxt.
    • Исправлена ошибка с записью в лог адресов IPv6 вместо IPv4 для макетов ПБР.
  • 1.0.10.1101
    • Исправлена ошибка с определением номера ПБР для макетов TubrCsv в случае зимнего времени.
    • Теперь если при обработке папки писем не удалось считать message.xml, то папка с письмом все-равно перемещается в targetPath (если этот путь задан в настройках).
  • 1.0.10.1022
    • Добавлена пост-обработка (тэг <postprocessing>). Запускается только после успешного завершения основной обработки.
  • 1.0.10.1021
    • Удалено предупреждение в лог о том, что файл не был обработан, если конфигурация не содержит данных об обработке (тэги <processing>).
  • 1.0.10.1020
    • Для макетов ПБР добавлен режим сохранения только в архив (Archive) или в как обычно в архив и БД команд (Rdg). Настраивается атрибутом template.storage.
  • 1.0.10.1018
    • В макет TubrCsv добавлена обработка макетов, заканчивающихся символом '->' (код 1A).
  • 1.0.10.0930
    • В макет TubrCsv добавлена поддержка формата ТУБР "Гепард".
  • 1.0.10.0928
    • Добавлен макет CommonTxt на основе регулярных выражений.
  • 1.0.10.0909
    • Изменена логика обработки папки-источника для случая с настройкой createdOnly="true" для лучшей надежности с сетевыми папками.
  • 1.0.10.0819
    • Добавлены поддержка excel-макета ППБР для ИГРЭС (IgresXls). Для него в качестве srcId указывается номер столбца в xls-документе.
  • 1.0.10.0811
    • Добавлен ключ командной строки -logsql.
    • Исправлена ошибка в обработке макетов FullDay.
  • 1.0.10.0618
    • Добавлено сообщение в лог об игнорировании файлав, нераспознанного формата.
  • 1.0.10.0601
    • Исправлена ошибка, из-за которой в RDGEvents попадало несколько записей для одного макета и ГТП.
  • 1.0.10.0531
    • Добавлен ключ -nopbrvalidation. Если указан, то ПБР-ы не проверяются на корректность даты и времени активации.
  • 1.0.10.0529
    • Первая версия. Поддержка текстовых макетов ПБР и CSV-макетов ТУБР.